// https://leetcode-cn.com/problems/maximum-subarray/
// 给你一个整数数组 nums ，请你找出一个具有最大和的连续子数组（子数组最少包含一个元素），返回其最大和。
// 子数组 是数组中的一个连续部分。
#include <iostream>
#include <vector>

using namespace std;


class Solution {
public:
    /*int maxSubArray(vector<int> &nums) {
        int pre = 0, maxAns = nums[0];
        for (const auto &x: nums) {
            pre = max(pre + x, x);
            maxAns = max(maxAns, pre);
            cout << "maxAns:" << maxAns << ",pre:" << pre << endl;
        }
        return maxAns;
    }*/

    int maxSubArray(vector<int> &nums) {
        int prev = 0, res = nums[0];
        for (int i = 0; i < nums.size(); i++) {
            prev = max(prev, prev + nums[i]);
            res = max(res, prev);
        }
        return res;
    }
};


int main() {
    vector<int> input = {-2, -3, 4, -1, -5};
    Solution so;
    int max = so.maxSubArray(input);
    cout << "max: " << max << endl;
    return 0;
}